<?php
/**
 * Memcache 应用
 * 
 * @author river_he@eueang.com
 */
class Kit_Memcache {
	//一小时
	const KIT_MEM_TIME= 3600;
	
	/**
	 * host
	 * 
	 * @var unknown_type
	 */
	private $_mem;
	
	/**
	 * 资源表示(服务组标识)
	 * 
	 * @var string
	 */
	private $id;
	
	/**
	 * 结构函数
	 * 
	 * @param string $address
	 * @param int $port
	 */
	public function __construct($host, $port, $identity){
		$this->_mem = new Memcache();
		$this->id = $identity.':'.$host.':'.$port;
		if(!$this->_mem->pconnect($host, $port)){
			throw new Kit_Memcache_Exception(501, 'can\'t connect to '.$host.' port is '.$port);
		}
	}
	
	/**
	 * 获取资源表示
	 * 
	 * @return string
	 */
	public function getId(){
		return $this->id;
	}
	
	/**
	 * 清楚所有缓存(只是让所有的缓存都过期)
	 * 
	 * @return boolean
	 */
	public function flush(){
		return $this->_mem->flush();
	}
	
	/**
	 * 缓存值做加法
	 * 
	 * @param string $key
	 * @param int $value
	 * @return int
	 */
	public function increment($key, $value=1){
		//@todo
		return $this->_mem->increment($key, $value);
	}
	
	/**
	 * 缓存值做减法
	 * 
	 * @param string $key
	 * @param int $value
	 * @return int
	 */
	public function decrement($key, $value=1){
		//@todo
		return $this->_mem->decrement($key, $value);
	}
	
	/**
	 * 删除缓存
	 * 
	 * @param string $key
	 * @return boolean
	 */
	public function delete($key){
		return $this->_mem->delete($key);
	}
	
	/**
	 * 添加缓存(添加一个值，如果已经存在，则覆写)
	 * @param string $key
	 * @param mixed $value
	 * @param int $expire
	 */
	public function set($key, $value, $expire=Kit_Memcache::KIT_MEM_TIME){
		return $this->_mem->set($key, $value, false, $expire);
	}
	
	/**
	 * 更新缓存值(对一个已有的key进行覆写操作和set基本相同)
	 * 
	 * @param string $key
	 * @param mixed $value
	 * @param int $expire
	 * @return boolean
	 */
	public function replace($key, $value, $expire=Kit_Memcache::KIT_MEM_TIME){
		return $this->_mem->replace($key, $value, $expire);
	}
	
	/**
	 * 获取缓存值
	 * 
	 * @param string $key
	 */
	public function get($key){
		return $this->_mem->get($key);
	}
	
	/**
	 * 添加缓存(添加一个值，如果已经存在，则返回false)
	 * 
	 * @param string $key
	 * @param mixed $value
	 * @param int $expire
	 * @return boolean
	 */
	public function add($key, $value, $expire=Kit_Memcache::KIT_MEM_TIME){
		return $this->_mem->add($key, $value, false, $expire);
	}
	
	/**
	 * 获取版本
	 * 
	 * @return string
	 */
	public function getVersion(){
		return $this->_mem->getVersion();
	}
	
	/**
	 * 获取缓存状态（统计）
	 * 
	 * @return array
	 */
	public function getStatus(){
		return $this->_mem->getStats();
	}
	
	/**
	 * 析构函数
	 * 
	 * @retur void
	 */
	public function __destruct(){
		$this->_mem->close();
	}
}
//end